package com.zhongkai.service.book;
import java.util.Date;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.zhongkai.model.book.TDjCcdjxx;
import com.zhongkai.model.book.TDjCcdjxxLs;
import com.zhongkai.model.book.TDjCcywcl;
import com.zhongkai.model.book.TDmCcsDjzt;
import com.zhongkai.model.book.TDmCcsYwlx;
import com.zhongkai.model.book.TDmCcsZxyy;
import com.zhongkai.model.config.User;
import com.zhongkai.service.CommonService;
import com.zhongkai.tools.DateManageTool;
import com.zhongkai.tools.StringTool;
/**
 * 声明了事务的类，不能继承BaseDao类，即使BaseDao类为父类也不可以
 * @author Administrator
 *
 */
@Component
@Transactional
public class CancelService extends CommonService {
	/**
	 * 车船注销和恢复的事务方法
	 * @param old_tDjCcdjxx
	 * @param zxhfRqOrzxRq
	 * @param ywclTypeDm：业务类型的编号
	 * @param param：根据不同的业务类型，传入不同的字符串参数组：如：注销要传入注销的原因代码编号，而回复则传入备注说明，但是对于应税年月调整，则需要多个参数值
	 * @param request
	 * @return
	 */
	@Transactional
	public boolean cczxAndcchf_Transaction(TDjCcdjxx old_tDjCcdjxx,Date zxhfRqOrzxRq,String ywclTypeDm, String[] param,HttpServletRequest request){
		try {
			/**注意：
			 * 之所以要用BeanUtils.copyProperties(old_tDjCcdjxx,copy_tDjCcdjxx);来代替TDjCcdjxx copy_tDjCcdjxx=old_tDjCcdjxx;
			 *对于 TDjCcdjxx copy_tDjCcdjxx=old_tDjCcdjxx;语句，copy_tDjCcdjxx的状态会随着old_tDjCcdjxx的变化而变化，
			 *如：old_tDjCcdjxx进行更新时，copy_tDjCcdjxx也会进行更新【可能两者都是在同一个内存地址？？？？java的机制】
			 */
			TDjCcdjxx copy_tDjCcdjxx=new TDjCcdjxx();
			BeanUtils.copyProperties(old_tDjCcdjxx,copy_tDjCcdjxx);
			TDjCcywcl tDjCcywcl=new TDjCcywcl();
			Date date=new Date();//修改和变更日期			
			User user=(User) request.getSession().getAttribute("user");//操作人和修改人
			
			/*不同的业务处理，对登记表和业务处理的特殊处理	 */			
			if("99".equals(ywclTypeDm)){//业务处理：99---------->注销；	
				/*登记表：设置新的登记状态编码://09----->已注销*/
				old_tDjCcdjxx.setDjztDm(TDmCcsDjzt.UNAVAILABLE);				
				/*业务处理表：设置注销原因和注销日期*/
				tDjCcywcl.setZxYyDm(param[0]); 
				tDjCcywcl.setZxRq(zxhfRqOrzxRq);
			}else if("98".equals(ywclTypeDm)){//业务处理：98------>注销恢复				
				/*登记表：设置新的登记状态编码:【01---->正常使用】和设置恢复备注，以及调整应税年月*/
				old_tDjCcdjxx.setDjztDm(TDmCcsDjzt.AVAILABLE);
				old_tDjCcdjxx.setBz(param[0]);
				String cczxhfRq=String.valueOf(DateManageTool.getYearMon(zxhfRqOrzxRq, false));
				old_tDjCcdjxx.setSbqsny(cczxhfRq);//将应税起始年月修改为恢复时间
				/*业务处理表：设置注销恢复日期，*/
				tDjCcywcl.setZxhfRq(zxhfRqOrzxRq);				
			}if("10".equals(ywclTypeDm)){//业务处理：10代表应税年月调整
				old_tDjCcdjxx.setSbqsny(param[0]);
				old_tDjCcdjxx.setBz(param[1]);
				tDjCcywcl.setYwlxDm("10");//业务处理：10代表“管理员调整应税年月”
			}
			old_tDjCcdjxx.setXgrDm(user.getUserIdentifier());
			old_tDjCcdjxx.setXgRq(date);
			this.update(old_tDjCcdjxx);
			
			
			/*处理业务处理表			 */			
			tDjCcywcl.setYwlxDm(ywclTypeDm);//设置业务处理的代码编号			
			tDjCcywcl.setCcdjh(old_tDjCcdjxx.getCcdjh());
			tDjCcywcl.setDjRq(old_tDjCcdjxx.getDjRq());
			tDjCcywcl.setCzrDm(user.getUserIdentifier());
			tDjCcywcl.setCzRq(date);
			this.save(tDjCcywcl);
			
			
			/*处理历史表			 */
			TDjCcdjxxLs tDjCcdjxxLs=new TDjCcdjxxLs();
			BeanUtils.copyProperties(copy_tDjCcdjxx, tDjCcdjxxLs);
			tDjCcdjxxLs.setYwclXh(tDjCcywcl.getYwclXh());
			this.save(tDjCcdjxxLs);					
		}  catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
		
	}
	
	
	
	/**
	 * 根据申报的起始年月的字符串（200108）和注销日期2001-12-08，验证是否完税
	 * @param sbqsny
	 * @param cancelDate
	 * @return
	 */
	public Boolean isfinish(String sbqsny,Date cancelDate){
		int sbdate=Integer.valueOf(sbqsny);					
		int[] date=DateManageTool.cutDate(cancelDate);
		int zxdate_judege=DateManageTool.getYearMon(cancelDate,false);	
		if(date[0]>=2007){
			zxdate_judege=DateManageTool.getYearMon(cancelDate,true);//将月份减一，返回年月的合并整形数：197805
		}	
		if(sbdate<zxdate_judege){
			return false;
		}else{
			return true;
		}
	}
	
	
	



}
